package fecha;

import java.text.SimpleDateFormat;
import java.util.*;
import numeros.Constantes;
import numeros.ConversionesTiempo;

public class FechaActual {
	
	private int iAnio = 0;
	private int iMes = 0;
	private int iDia = 0;
	private int iHora = 0;
	private int iMinutos = 0;
	private double dMinutos = 0.0;
	private double dSegundos = 0;
	private double dMiliSegundos = 0.0;
	private double dDiaJuliano = 0.0;
	private double dTsg0 = 0.0;
	private double dTsgT = 0.0;
	private double dTU = 0.0;
	private double T = 0.0;
	
	public FechaActual(){
		Calendar dFecha = Calendar.getInstance();
		iAnio = dFecha.get(Calendar.YEAR);
		iMes = dFecha.get(Calendar.MONTH);
		iDia = dFecha.get(Calendar.DAY_OF_MONTH);
		iHora = dFecha.get(Calendar.HOUR_OF_DAY);
		iMinutos = dFecha.get(Calendar.MINUTE);
		dMinutos = dFecha.get(Calendar.MINUTE);
		dSegundos = dFecha.get(Calendar.SECOND);
		dMiliSegundos = dFecha.get(Calendar.MILLISECOND);
	}

	public int getiAnio() {
		return iAnio;
	}

	public void setiAnio(int iAnio) {
		this.iAnio = iAnio;
	}

	public int getiMes() {
		return iMes;
	}

	public void setiMes(int iMes) {
		this.iMes = iMes;
	}

	public int getiDia() {
		return iDia;
	}

	public void setiDia(int iDia) {
		this.iDia = iDia;
	}

	public int getiHora() {
		return iHora;
	}

	public void setiHora(int iHora) {
		this.iHora = iHora;
	}

	public int getiMinutos() {
		return iMinutos;
	}

	public void setiMinutos(int iMinutos) {
		this.iMinutos = iMinutos;
	}

	public double getdSegundos() {
		return dSegundos;
	}

	public void setiSegundos(double iSegundos) {
		this.dSegundos = iSegundos;
	}
	
	public double getdMinutos() {
		return dMinutos;
	}

	public double getdMiliSegundos() {
		return dMiliSegundos;
	}

	public void setdMinutos(double dMinutos) {
		this.dMinutos = dMinutos;
	}

	public void setdMiliSegundos(double dMiliSegundos) {
		this.dMiliSegundos = dMiliSegundos;
	}

	public String getNow(){
		Calendar dFecha = Calendar.getInstance();	
		Date dFechaActual = dFecha.getTime();
		SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/MM/yyyy");
		String sFecha = formatoFecha.format(dFechaActual);
		return sFecha;
	}
	
	public void setdDiaJuliano() {
		   //dada una fecha del calendario gregoriano, obtiene
		   //un entero que la representa
		
			double dHora;
			double dMes;
			long lAnio = iAnio;
			
			dMes = (double) iMes;
			
			dHora = iHora;
			
			int GGG = 1;
			
			if(iAnio <= 1585){
				
				GGG = 0;
			}
			
			dDiaJuliano = -1 * java.lang.Math.round(7 * (java.lang.Math.round((dMes +9)/12)+ lAnio) / 4);
			
			int S = 1;
			
			if((dMes - 9) < 0){
				S = -1;
			}
			
			double A = java.lang.Math.abs(dMes -9);
			
			int diaJuliano2 = java.lang.Math.round(lAnio + S * java.lang.Math.round(A/7));
			
			diaJuliano2 = -1 * java.lang.Math.round((java.lang.Math.round(diaJuliano2 / 100) + 1) * 3 / 4);
			 
			dDiaJuliano = dDiaJuliano + java.lang.Math.round(275 * dMes / 9) + dMes +(GGG * diaJuliano2);
			
			dDiaJuliano = dDiaJuliano + 1721027 + 2 * GGG + 367 * lAnio - 0.5;
			
			dDiaJuliano = dDiaJuliano + (dHora / 24);
			
	}//Fin metodo fechaJuliana	
	
	public double getDiaJuliano(){
		return dDiaJuliano;
	}
	
	public void setdTU() {
		double dHora = 0.0;
		ConversionesTiempo convertirHora = new ConversionesTiempo(iHora, iMinutos, dSegundos);
		convertirHora.setHorasDecimal();
		dHora = convertirHora.getdHorasDecimal();
		dTU = dHora * Constantes.dTU;
	}
	
	public void setconstanteTiempo(){
		T = (dDiaJuliano - Constantes.iT) / Constantes.iDiasAnio;
	}//Fin metodo cosntanteTiempo

	public void setdTsg0() {
		
		dTsg0 = Constantes.dConstanteGTsg1 + (Constantes.dConstanteGTsg2 * T) + dTU;
	}
	
	public double getdTsg0(){
		return dTsg0;
	}
	
	public void setdTsgT() {
		if(dTsg0 > 24){
			dTsgT = dTsg0 - (java.lang.Math.round(dTsg0/24) * 24) + dTU;
		}
		else{
			dTsgT = dTsg0;
		}
	}
	
	public double getdTsgT(){
		return dTsgT;
	}
}//Fin clase FechaActual
